Linux中使用nohup实现后台运行程序 |
您所在的位置:网站首页 › linux 前台程序 顺序执行 › Linux中使用nohup实现后台运行程序 |
应用场景
在Linux服务器上运行一个程序,希望关闭终端(CMD窗口)时程序可以在后台继续运行 nohup 和 & 介绍一、nohup 加在一个命令的最前面,表示不挂断的运行命令 1.1 操作系统中三个常用的流 0: 标准输入流 stdin 1: 标准输出流 stdout 2: 标准错误流 stderr 一般当我们用 > console.txt,实际是 1 > console.txt的省略用法;< console.txt,实际是 0 < console.txt的省略用法 二、& 加在一个命令的最后面,表示该命令放在后台执行 三、例子 nohup ./start-dishi.sh >output 2>&1 &解释说明 &命令,即使terminal(终端)关闭,或者电脑死机程序依然运行(前提是你把程序递交到服务器上)2>&1的意思是,把标准错误 2 重定向到标准输出 1,而标准输出又导入文件output里面,所以结果是标准错误和标准输出都导入文件output里面了。 至于为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而标准输出stdout有 查看后台运行程序的命令使用 ps 和 jobs 可以查看后台运行的程序。区别在于 jobs 只能查看当前终端的后台执行任务。ps 适用于查看瞬时进程的动态,可以看到其他终端的任务 例子1: [root@localhost test]# jobs [1]- 运行中 nohup java -Dfile.encoding=UTF-8 -Dname=Runtime-Name -server -Xms128M -Xmx512M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -jar test.jar $1 $2 $3 &(工作目录:/home/ams/ams-server/test) [2]+ 运行中 nohup java -Dfile.encoding=UTF-8 -Dname=Container-Name -server -Xms128M -Xmx512M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -jar test1.jar $1 $2 $3 &先后起了两个后台运行的进程,使用jobs后都显示出来了。“+”代表最近的一个任务(当前任务),“-”代表之前的任务 ⚠️注意: 只有在当前命令行中使用 nohup和& 时,jobs命令才能将它显示出来。如果将他们写到 .sh 脚本中,然后执行脚本,是显示不出来的 前后台进程的切换与控制(1)fg命令 将后台中的命令调至前台继续运行。如果后台中有多个命令,可以先用jobs查看jobnun,然后用 fg %jobnum 将选中的命令调出 (2)Ctrl + z 命令 将一个正在前台执行的命令放到后台,并且处于暂停状态 (3)bg命令 将一个在后台暂停的命令,变成在后台继续执行 遇到问题1、虽然使用了 nohup 和 & 命令启动程序,但是关闭终端后进程还是中断了 解决办法: 后来发现是操作的问题,每次命令行启动程序后,我都会立刻关闭终端(错误操作)。正确的操作方法是,成功启动程序后,需要在命令行输入exit来退出终端 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |